package ModelAndController;
/*
 * A jelgenerátor hálózati elemet megvalósító osztály. A jelgenerátor 
 * jelsorozattal rendelkezik, minden ütemezési ciklus elején belső állapota 
 * a jelsorozat - ciklikus értelemben vett - következő értékét veszi fel, 
 * és jeleníti meg az egyetlen kimenetén.
 */
//Exception 120 es 139 kozott
public class SignalGenerator extends Element{
	//A jelgenerátor ciklikusan ismétlődő állapotkészletét tartalmazza.
	private int[] state;
	private int actNbOfState;
	//konstruktor
	public SignalGenerator(){
		state = new int[1]; state[0] = 0;
		actNbOfState = 0;
	}
	//Beállítja a jelgenerátor állapottömbjét
	public void setStateArray(int[] newState){
		actNbOfState = -1;
		state = newState;
	}
	//Visszaadja a jelgenerátor állapottömbjét
	public int[] getStateArray(){
		return state;
	}
	//Az elem ütemezését végzi.
	public boolean isUpdateSuccess(){
		boolean retValue = false;
		
		if(shouldUpdate){
			allOutputWiresShouldUpdate();
			retValue = true;
			shouldUpdate =false;
		}

		buffer = Integer.toString(state[actNbOfState]);
		return retValue;
	}
	//Az elem aktuális állapotának értékét adja vissza.
	public int getState(int nbOfOutput){
		return state[actNbOfState];
	}
	//A jelgenerátor következő belső állapotát állítja be.
	public void setNextState(){
		incrementActNbOfState();
	}
	//A jelgenerátor következő belső állapotát állítja be.
	private void incrementActNbOfState(){
		actNbOfState++;
		if( state.length<=actNbOfState )
			actNbOfState = 0;
	}
	
	public void shouldUpdate(){		
		shouldUpdate = true;
	}
	
	//No inputWires for SignalGenerator
	public void setInputWireNumbers(int nbOfInputWires) throws Exception{
		if(nbOfInputWires != 0)
			throw new Exception("120");
	}

	//No inputWires for SignalGenerator
	public void setActualInputWire(int nbOfWire,Wire act) throws Exception{
		throw new Exception("120");
	}
	
}
